const Promise = require('bluebird');

exports.up = function(knex) {
    return knex.schema.createTable('categories', (table) => {
        table.increments().primary();

        table.tinyint('deleted')
        .defaultTo(0)
        .notNull()
        .unsigned()
        .comment('是否删除 0:未删除; 1:已删除');

        table.tinyint('status')
            .defaultTo(1)
            .notNull()
            .unsigned()
            .comment('属性状态 0: 不启用，1: 启用');


        table.string('name')
            .defaultTo('')
            .notNull()
            .comment('名称');

        table.integer('parent_id')
            .defaultTo(0)
            .unsigned()
            .notNull()
            .comment('父ID');

        table.integer('priority')
            .defaultTo(1)
            .notNull()
            .unsigned();

        table.timestamps();

        table.index(['parent_id'], 'idx_parentkey');
    })
    .then(() => {
        return knex.schema.table('goods', table => {
            table.integer('category_parent_id')
            .defaultTo(0)
            .unsigned()
            .notNull();

            table.integer('category_id')
            .defaultTo(0)
            .unsigned()
            .notNull();

            table.string('specs')
            .defaultTo('')
            .notNull()
            .comment('规格');

            table.string('unit')
            .defaultTo('')
            .notNull()
            .comment('单位');
        });
    });
};

exports.down = function(knex) {
    return knex.schema.dropTableIfExists('categories')
    .then(() => {
        return Promise.try(() => {
            ['category_id', 'specs', 'unit', 'category_parent_id'];
        })
        .map(colum => {
            return knex.schema.hasColumn(colum)
            .then(exists => {
                if(exists) {
                    return knex.schema.table('goods', table => {
                        table.dropColumn(colum);
                    });
                }
            });
        });
    });
};
